/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import dao.PersonaDao;
import java.awt.AlphaComposite;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import logica.FechaHora;
import logica.GestionComponentes;
import logica.Persistencia;
import modelo.Amigo;
import modelo.Persona;
import modelo.Seccion;
import vista.Principal;
import vista.panel.JPanelAltaAmigo;
import vista.panel.JPanelAltaLider;
import vista.panel.JPanelAltaPersona;
import vista.panel.JPanelAltaSeccion;
import vista.panel.JPanelBusqueda;
import vista.panel.JPanelEstadistico;
import vista.panel.JPanelRelacionar;

//import vista.panelImagenFondo;

/**
 *
 * @author Elias Mendoza
 */
public final class ControladorPrincipal implements ActionListener{

  Principal p;
  Persistencia persistencia;
  private Dimension dimensionFrameOriginal;


  public ControladorPrincipal(Principal p) {
    this.p = p;
    mustraFechaHora();
    cargaImagenFondo(p.jPanelCabecera, "cabecera3.png");
    cargaImagenFondo(p.jPanelTitulo, "cabecera.png");
    cargaImagenFondo(p.jPanelPrimario, "fondo_for2.png");
    cargaImagenFondo(p.jPanel1, "logo_prd.png");
    dimensionFrameOriginal = p.getSize();
    inicializaComandosJButton();
  }
  //metodo que se encarga de inicializar los comando de la ventana principal para estar a la escucha de una acccion
  public void inicializaComandosJButton(){
    this.p.jButtonAmigo.setActionCommand("mostrarpanelAmigo");
    this.p.jButtonEstadistico.setActionCommand("mostrarpanelEstadistico");
    this.p.jButtonRelacionar.setActionCommand("mostrarpanelRelacionar");
    this.p.jButtonOperacion.setActionCommand("mostrarpanelBusqueda");
    this.p.jButtonPersona.setActionCommand("mostrarpanelPersona");
    this.p.jButtonReporte.setActionCommand("mostrarpanelReporte");
    this.p.jButtonSeccion.setActionCommand("mostrarpanelSeccion");
    this.p.jButtonLider.setActionCommand("mostrarpanelLider");
    
    p.jButtonAmigo.addActionListener(this);
    p.jButtonEstadistico.addActionListener(this);
    p.jButtonRelacionar.addActionListener(this);
    p.jButtonOperacion.addActionListener(this);
    p.jButtonPersona.addActionListener(this);
    p.jButtonReporte.addActionListener(this);
    p.jButtonSeccion.addActionListener(this);
    p.jButtonLider.addActionListener(this);
   
  }

  @Override
    public void actionPerformed(ActionEvent e) {
        String comando = e.getActionCommand();
        if(comando.equals("mostrarpanelAmigo")){
           JPanel panel = (JPanel)JPanelAltaAmigo.getPanelAltaAmigo();
           aderirPanel(panel, p.jPanelContenedor);
        }
        if(comando.equals("mostrarpanelEstadistico")){
           JPanel panel = (JPanel)JPanelEstadistico.getPanelEstadistico();
           aderirPanel(panel, p.jPanelContenedor);
        }
        if(comando.equals("mostrarpanelRelacionar")){
           JPanel panel = (JPanel)JPanelRelacionar.getPanelRelacionar();
           aderirPanel(panel, p.jPanelContenedor);
        }
        if(comando.equals("mostrarpanelBusqueda")){
           JPanel panel = (JPanel)JPanelBusqueda.getPanelBusqueda();
           aderirPanel(panel, p.jPanelContenedor);
        }
        if(comando.equals("mostrarpanelPersona")){
           JPanel panel = (JPanel)JPanelAltaPersona.getPanelAltaPersona();
           aderirPanel(panel, p.jPanelContenedor);
        }
        if(comando.equals("mostrarpanelReporte")){
//           JPanel panel = (JPanel)JPanel;
//           aderirPanel(panel, p.jPanelContenedor);
        }
        if(comando.equals("mostrarpanelSeccion")){
           JPanel panel = (JPanel)JPanelAltaSeccion.getPanelAltaSeccion();
           aderirPanel(panel, p.jPanelContenedor);
        }
        if(comando.equals("mostrarpanelLider")){
           JPanel panel = (JPanel)JPanelAltaLider.getPanelAltaLider();
           aderirPanel(panel, p.jPanelContenedor);
        }
     
              
    }
  
  
  public ControladorPrincipal() {
      
  }
  
  public void mustraFechaHora() {
    new FechaHora(p.jLabelHora, p.jLabelFecha);
  }

  public void establecePosiscion() {
    //Propiedades para inicializar las dimensiones de la ventana en la pantalla
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (int) d.getWidth() * 90 / 100;
    int y = (int) d.getHeight() * 70 / 100;
//    p.setSize(x, y);
    p.setLocation((int) d.getWidth() / 2 - p.getWidth() / 2, (int) d.getHeight() / 2 - p.getHeight() / 2);
  }

  
  public void aderirPanel(JPanel panel, JPanel contenedorPanel) {
    contenedorPanel.add("panel", panel);
    CardLayout cl = (CardLayout) contenedorPanel.getLayout();
    cl.show(contenedorPanel, "panel");

  }
  public boolean compruebaExistencia(String nombre,String apellidoP,String apellidoM){
    if(new PersonaDao().personaRepetida(nombre, apellidoP, apellidoM) != null){
      JOptionPane.showMessageDialog(p, "Fallo el registro, la persona que intenta registrar ya existe", "error al registrar", JOptionPane.ERROR_MESSAGE);
      return true;
    }
    else
      return false;
  }

  public void registrar(Object obj, int forma, JTextPane paneldatos) {
    persistencia = new Persistencia();
    if (persistencia.insertar(obj, forma)) {
      JOptionPane.showMessageDialog(p, "Registro Exitoso", "Registro", JOptionPane.INFORMATION_MESSAGE);
      llenarCampoRegistro(obj, paneldatos, Color.BLUE);
    } else {
      JOptionPane.showMessageDialog(p, "Fallo el registro, verificar datos (duplicidad)", "error al registrar", JOptionPane.ERROR_MESSAGE);
      llenarCampoRegistro(obj, paneldatos, Color.RED);
    }
  }

  public void registrar(Object obj, int forma) {
    persistencia = new Persistencia();
    if (persistencia.insertar(obj, forma)) {
      JOptionPane.showMessageDialog(p, "Registro Exitoso", "Registro", JOptionPane.INFORMATION_MESSAGE);

    } else {
      JOptionPane.showMessageDialog(p, "Fallo el registro, verificar datos (duplicidad)", "error al registrar", JOptionPane.ERROR_MESSAGE);

    }
  }

  public void llenarCampoRegistro(Object obj, JTextPane paneldatos, Color color) {
    if (obj instanceof Amigo) {
      Amigo amigo = (Amigo) obj;
      paneldatos.setForeground(color);
      paneldatos.setBackground(color);
      
      paneldatos.setText(amigo.getNombre() + "\n");
      paneldatos.setText(paneldatos.getText() + amigo.getApellidos() + "\n");
      paneldatos.setText(paneldatos.getText() + amigo.getTelefono1() + "\n");
      paneldatos.setText(paneldatos.getText() + amigo.getTelefono2() + "\n");
      paneldatos.setText(paneldatos.getText() + amigo.getDireccion() + "\n");
//      paneldatos.setText(paneldatos.getText() + amigo.getSeccion() + "\n");
      paneldatos.setText(paneldatos.getText() + amigo.getLider() + "\n");
    }
    if (obj instanceof Persona) {
      Persona persona = (Persona) obj;
      paneldatos.setForeground(color);
      paneldatos.setBackground(color);
      paneldatos.setText(persona.getNombre() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getApellidoPaterno() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getApellidoMaterno() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getClaveElector() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getSexo() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getDireccion().getCalle() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getDireccion().getColonia() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getDireccion().getNumero() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getDireccion().getTelefono() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getAmigo().getFolio() + " " + persona.getAmigo().getNombre() + "\n");
      paneldatos.setText(paneldatos.getText() + persona.getSeccion().getNumero() + "\n");
    }
    if(obj instanceof Seccion){
      Seccion seccion = (Seccion) obj;
      paneldatos.setForeground(color);
      paneldatos.setBackground(color);
      paneldatos.setText(seccion.getNumero() + "\n");
      paneldatos.setText(paneldatos.getText() + seccion.getColonias() + "\n");
      paneldatos.setText(paneldatos.getText() + seccion.getLocalidad() + "\n");
    }
  }

  public void cargaImagenFondo(JPanel panel, String imagen) {
    ImagenFondo p1 = new ImagenFondo(panel.getSize(), "/vista/img/" + imagen);
    panel.add(p1);
    panel.repaint();
  }

  public boolean compruebaCaracterNumero(int caracter) {
    System.out.println(caracter);
    if (caracter >= 48 && caracter <= 57) {
      return true;
    } else {
      return false;
    }
  }

  public boolean compruebaCaracterSexo(int caracter) {
    System.out.println(caracter);
    if (caracter == 72 || caracter == 104 || caracter == 77 || caracter == 109) {
      return true;
    } else {
      return false;
    }
  }

  public boolean camposVacios(JTextField[] campos) {
    GestionComponentes componentes = new GestionComponentes();
    if (componentes.camposVacios(campos)) {
      JOptionPane.showMessageDialog(p, "Fallo el registro, campos vacios", "error al registrar", JOptionPane.ERROR_MESSAGE);
      return true;
    }
    return false;

  }

  public void vaciaCampos(JTextField[] campos) {
    GestionComponentes componentes = new GestionComponentes();
    componentes.vaciarCampos(campos);
  }

  public void llenaJComboBoxSecciones(JComboBox combo) {
    GestionComponentes componente = new GestionComponentes();
    componente.llenaComboSecciones(combo);
  }

  public void llenaJComboBoxLideres(JComboBox combo) {
    GestionComponentes componente = new GestionComponentes();
    componente.llenaComboLideres(combo);
  }

  public void llenaJComboBoxAmigos(JComboBox combo, int seccion) {
    GestionComponentes componente = new GestionComponentes();
    componente.llenaComboAmigos(combo, seccion);
  }

    
}
class ImagenFondo extends javax.swing.JPanel {

  String url;

  public ImagenFondo(Dimension t, String url) {
    this.setSize(t);
    this.url = url;
  }

  @Override
  public void paint(Graphics g) {
    Image imagen = new ImageIcon(getClass().getResource(url)).getImage();
    g.drawImage(imagen, 0, 0, getWidth(), getHeight(), this);
    setOpaque(false);
    super.paintComponent(g);
  }

  static void renderSplashFrame(Graphics2D g, int frame) {
    final String[] comps = {"foo", "bar", "baz"};
    g.setComposite(AlphaComposite.Clear);
    g.fillRect(120, 140, 200, 40);
    g.setPaintMode();
    g.setColor(Color.BLACK);
    g.drawString("Loading... ", 120, 150);
  }
}
